<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>全排列</title>
</head>

<body>
  <script>
    /**
 * 全排列问题
 * 算法思想： 回溯的思想
 * 依次将待排列的数组的后n-1个元素与第一个元素交换，则
 * 每次递归处理的都是后n-1个元素的全排列问题。当数组元
 * 素仅有一个时为此递归算法的出口
 * 算法复杂度：O(n!)
 * Method : fullPerm
 * param : {
 *   list : 需要全排列的数组
 *   k    : 当前递归的数组的第一个元素下标
 *   m    : 数组长度-1
 * }
 * 
 */
    function fullPerm(list, k, m) {
      if (k == m) {
        console.log(list);
      } else {
        for (var i = k; i <= m; i++) {
          //交换k和i的值
          var t = list[k];
          list[k] = list[i];
          list[i] = t;
          //递归调用一下
          fullPerm(list, k + 1, m);
          list[i] = list[k];
          list[k] = t;
        }
      }
    }

    var list = [1, 2, 3, 4];
    fullPerm(list, 0, 3);
  </script>
</body>

</html>